UNIX a.out形式
a.outフォーマットはUNIXにおける最初の実行可能ファイルおよびリンク可能ファイルの形式である。 名前の由来はコンパイラの出力ファイルのデフォルト名(a.out, アセンブラアウトプット)から。
UNIXで長く使われた伝統形式でもあり、OMAGIC後~90年台、特にBSD形UNIXで採用された。
コードとデータが分離されており、セキュリティにも優れる。fork, thread, vforkなどのOSの機能によってコードやデータ・スタックの共有も容易である。
以下、a.out形式の中でもシステムソフトウェア構成論で取り扱うNMAGIC形式について記述する。
他にはOMAGICやQMAGIC形式があり、ヘッダは同一だがテキスト・データセグメントなどの書式が微妙に異なっており、ロードの仕方も異なる。
ロード手順
ヘッダを読み込む
共有するテキストセグメントがあれば該当する物理ページを仮想ページにマップ
データ+BSSのデータセグメントを割り当て
データのロード
BSSは0クリア
スタックポインタをセット
エントリポイントへjump
a.outの構造
https://gyazo.com/a8dbcec0d6dbe46c3b217b426534cb5f
テキストセグメントは読み込み専用領域にロードされる。
データセグメントはテキストに続くページ境界から始まる書き込み可能領域にロードされる。
データセグメント以下の再配置情報は基本的にリンク時に用いられる領域であり、ロード時には必要ない。